#include "matrix.h"
#include "function.hpp"

int main()
{
    matrix A(3, 3, {1, 0, 0, 1, 0, 1, 0, 1, 0});
    ((A ^ 3) + (A ^ 2) + (A)).Out();
    // matrix E(3);
    // matrix B("B", 3, 3, {37.11, 6.47, 79.7, 2.27, 75.52, 87.81, 17.3, 74.6, 7.97});
    // B.Out('f');
    // B.Info();

    // Approx(B + E).Out();
    // NULL_MATRIX.Out();

    // matrix TEST;
    // TEST.in("TEST", 3, 3) = {0, 0, 1, 1, 0, 0, 0, 1, 0};
    // TEST.Stock_byColumn();
    // TEST.Out();

    // Serious bugs:
    // matrix F = (Merge_inColumn(Merge_inRow(E, B), Merge_inRow(!B, E)));
    // F.Out();
    // (!F).Out();
    // Approx(!F * F).Out();

    // (!F * F).Out('f');

    // matrix W;
    // W.Init("W", 3, 3) = {1, 2, 3, 2, 1, 4, 3, 4, 1};
    // W.Info();
    // if (W * ~W == ~W * W)
    //     cout << "Proved: W * ~W == ~W * W"
    //          << "\n";

    // cout << "Det((!B) * ~(~(W ^ 2) * !W))= " << Det(!B * ~(~(W ^ 2) * !W)) << '\n';

    // vector<vector<double>> A(0);
    // A.resize(2, vector<double>(2));
    // vector<double> b = {1, 2};
    // vector<double> c = {3, 4};
    // A[0] = {b};

    return 0;
}
